package io6;

import java.io.*;
import java.util.*;

public class FileTypeNum {
    public static void main(String[] args) {
        /*5.键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,
        注意:用文件类型(后缀名,不包含.(点),如："java","txt")作为key,
    用个数作为value,放入到map集合中,并用两种方式遍历map集合
    例如：
    doc 的类型的文件有  3 个
    java 的类型的文件有  5 个
    txt 的类型的文件有  7 个
*/
        Scanner input = new Scanner(System.in);
        System.out.printf("请输入你想查询的文件夹：");
        File file = new File(input.nextLine());
        File[] files = file.listFiles();
        String suffix = null;
        boolean isNewType = false;
        LinkedList<File> list = new LinkedList<>();//用来存储文件夹
        HashMap<String,Integer> hashList = new HashMap<>();//用来存放文件类型和数量
        for (File file2: files
             ) {
            if (file2.isDirectory()) {
                list.add(file2);
            }else{
                suffix = file2.getName().substring((file2.getName().lastIndexOf(".") + 1));//取出后缀
                isNewType = hashList.containsKey(suffix);//检查此文件是否存在
                if (isNewType) {//当hashMap中已经有此文件时，对其重新设置值
                    hashList.put(suffix,hashList.get(suffix) + 1);
                } else{//当hashMap中没有此文件时，对其设置值为1
                    hashList.put(suffix,1);
                }
            }
        }
        File temp = null;
        while (!list.isEmpty()){
            temp = list.removeFirst();//将这个list的集合中的第一个文件夹删除并给temp
            files = temp.listFiles();//让temp获取它的所有文件及文件夹
            for (File file3: files
                 ) {
                if (file3.isDirectory()) {
                    list.add(file3);
                }else{
                    suffix = file3.getName().substring(file3.getName().lastIndexOf(".") + 1);
                    isNewType = hashList.containsKey(suffix);
                    if (isNewType) {
                        hashList.put(suffix,hashList.get(suffix) + 1);
                    }else{
                        hashList.put(suffix,1);
                    }
                }
            }
        }

        for (Map.Entry<String,Integer> allFile: hashList.entrySet()//使用Entry方法打印出键值对
             ) {
            System.out.println(allFile.getKey() + "的类型的文件有" + allFile.getValue() + "个");
        }
    }
}
